#include "StdAfx.h"
#include ".\netmessagequeue.h"

namespace _FOGGE_
{
	namespace _NET_
	{

		NetMessageQueue::NetMessageQueue(void)
		{
		}

		NetMessageQueue::~NetMessageQueue(void)
		{
			Clear();
		}

		void  NetMessageQueue::Clear()
		{
			RLock locker(&m_cs);
			int size=m_Messages.size();

			std::list<NetMessage *>::iterator iterMessage, end;

			end=m_Messages.end();

			for( iterMessage = m_Messages.begin(); iterMessage != end; ++iterMessage )
			{
				(*iterMessage)->FreeToPool();
			}

			m_Messages.clear();

		}
		void  NetMessageQueue::AddMessage( NetMessage * ptrMessage)
		{
			RLock locker(&m_cs);
			m_Messages.push_back( ptrMessage );
		}
		NetMessage * NetMessageQueue::GetMessage( )
		{
			
			if( m_Messages.empty() == true )
				return NULL;

			NetMessage *pMessage;

			RLock locker(&m_cs);

			pMessage = *m_Messages.begin();
			m_Messages.pop_front();

			return pMessage;
		}
	}
}
